package com.tedu.api.d2_string.work;
/*
 * 1.Object
 *  一共有11个方法
 *  目前掌握3个方法
 *  toString() 对象的自我描述
 *    System.out.println(对象);//toString()
 *  hashCode() 和对象地址有关，但不是地址的一个整数值
 *  equals() 对象的比较方法
 *     和散列算法相关的数据结构会调用对象hashCode() equals()
 *     自反性   x.equals(x)
 *     对称性   x.equals(y)  y.equals(x)
 *     传递性  x.equals(y) y.equals(z)
 *     持久性
 *     非空引用 x x.equals(null) false
 * 2.String
 *   1)对象不可变
 *    因为String中内容是char类型数组，是通过final修饰
 *    出于安全考虑
 *    网络上传递很多字符串(URL)
 *   2)字符串常量池优化问题
 *     虚拟机对字符串字面量进行了优化，当定义了字面量会用到常量池
 */
public class T2 {
    public static void main(String[] args) {
        String a = "helloworld";
        String b = "hello"+"world";//helloworld
        System.out.println(a==b);//true
//		Emp e = new Emp(1,"张三");
//		Emp e2 = new Emp(2,new String("张三"));
//		System.out.println(e.equals(e2));
    }

}
class Emp{
    Emp(){}
    Emp(int id,String name){
        this.id = id;
        this.name = name;
    }
    String name;
    int id;
    public boolean equals(Object o) {
        if(o == this) {
            return true;
        }
        if(o == null) {
            return false;
        }
        //this和o不是同一个类型
        if(this.getClass() != o.getClass()) {
            return false;
        }
        Emp e = (Emp)o;
        if(this.name.equals(e.name)) {
            return true;
        }
		/*
		if(this.name == e.name) {
			return true;
		}
		*/
        return false;
    }
}

